package leetcode.code0275;

import leetcode.IDebug;
import leetcode.helper.HelpDebug;

/**
 * 执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户
 *
 * 内存消耗：45.5 MB, 在所有 Java 提交中击败了5.29%的用户
 *
 * 通过测试用例：83 / 83
 *
 */
public class Solution implements IDebug {

	public int hIndex(int[] citations) {
		int len = citations.length;
		int ans = 0;
		int L = 1, R = len;
		while (L <= R) {
			int M = ((R - L) >> 1) + L;// 猜M个符合H条件。总共有M篇论文分别被引用了至少M次
			int i = citations[len - M];
			if (i >= M) {
				ans = M;// 确实复核
				L = M + 1;// 扩大M的范围是否还有符合的H。
			} else {
				R = M - 1;// 猜大了
			}
		}
		return ans;
	}

	@Override
	public void debug1() {
		HelpDebug.compare(3, this.hIndex(HelpDebug.str2array3("[0,1,4,5,6]")));

	}

	@Override
	public void debug2() {

		HelpDebug.compare(2, this.hIndex(HelpDebug.str2array3("[4,5]")));

	}

	@Override
	public void debug3() {
		HelpDebug.compare(0, this.hIndex(HelpDebug.str2array3("[0,0]")));

	}

	@Override
	public void debug4() {
		// TODO Auto-generated method stub

	}

	public static void main(String[] args) {
		Solution so = new Solution();
		so.debug2();
		so.debug1();
		so.debug3();
		so.debug4();

	}

}
